#ifndef COLAPRIORIDADIMP_H
#define COLAPRIORIDADIMP_H

#include "ColaPrioridad.h"
#include "Array.h"
#include "Puntero.h"
#include "TablaHash.h"


template <class T>
class ColaPrioridadImp : public ColaPrioridad<T>
{
	private:
			Array<T> heap;
			nat tope;
			Puntero<TablaHash<T, nat>> tablaHash;
			Puntero<Comparador<T>> fComparador;
			nat maxTamanio;
			void Hundir(nat pos);
			void Flotar(nat pos);
			void IntercambiarEnHash(nat pos1, nat pos2);
			
	public:
		    virtual ~ColaPrioridadImp();
			ColaPrioridadImp(nat largo, Puntero<FuncionHash<T>> fHash, Puntero<Comparador<T>> fComp, Puntero<Comparador<T>> fCompHash);
			T& Minimo();
			void Vaciar();
			bool EsVacia() const;
			bool EsLlena() const;
			void Insertar(const T& e);
			void BorrarMinimo();
			void ActualizarPrioridad(T& elemento);
			
};
#include "ColaPrioridadImp.cpp"
#endif